#include "hal_flash.h"
#include "driverlib.h"
#include "device.h"

#ifdef _FLASH
#ifndef CMDTOOL
// 外部变量由链接脚本生成
extern uint16_t RamfuncsLoadStart;
extern uint16_t RamfuncsLoadEnd;
extern uint16_t RamfuncsLoadSize;
extern uint16_t RamfuncsRunStart;
extern uint16_t RamfuncsRunEnd;
extern uint16_t RamfuncsRunSize;
#endif
#endif

#include <string.h> // for memcpy

bool hal_flash_init(void)
{
#ifdef _FLASH
#ifndef CMDTOOL
    // 1. 复制Flash运行关键代码到RAM（如InitFlash等）
    //
    // The RamfuncsLoadStart, RamfuncsLoadSize, and RamfuncsRunStart symbols
    // are created by the linker. Refer to the device .cmd file.
    memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
#endif

    // 2. 初始化Flash，设置waitstate，必须驻留RAM
    Flash_initModule(FLASH0CTRL_BASE, FLASH0ECC_BASE, DEVICE_FLASH_WAITSTATES);
#endif
    return true;
}
